<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>CruiseControl.NET : Telelogic Synergy</title>
	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
    </head>

    <body>
	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
		    <tr>
			    <td valign="top" class="pagebody">
				    <div class="pageheader">
					    <span class="pagetitle">
                            CruiseControl.NET : Telelogic Synergy
                                                    </span>
				    </div>
				    <div class="pagesubheading">
					    This page last changed on Sep 11, 2008 by <font color="#0050B2">williams</font>.
				    </div>

				    <h2><a name="TelelogicSynergy-Abstract"></a>Abstract</h2>

<p>This page describes integration of CruiseControl.NET with Telelogic's Synergy SCM product suite, specifically CM Synergy as well as ChangeSynergy.  Detection of modifications is entirely task based rather than object based, which may present problems for pre-6.3 lifecycles. Successful integration may be published through shared manual task folders and/or baselining.</p>
<div class='panelMacro'><table class='warningMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/forbidden.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Warning</b><br />
<p>This integration has been thoroughly tested against CM Synergy 6.3 SP4 and ChangeSynergy 4.3 SP3 Windows/Informix with the DCM option enabled.  While untested, CM Synergy installations on Unix/Informix or Unix/Oracle should function properly.</p></td></tr></table></div>

<h2><a name="TelelogicSynergy-Background"></a>Background</h2>

<p><a href="http://confluence.public.thoughtworks.org//display/CC/CMSynergyConcepts" title="CMSynergyConcepts">CM Synergy Concepts</a> is arguably one of the best conceptual explanations of CM Synergy.  Consider it a prerequisite for implementing continuous integration with CM Synergy. <a href="http://confluence.public.thoughtworks.org//display/~rjmpsmith">Robert Smith</a>, from the CruiseControl for Java site, deserves a great deal of credit for explaining the product better than Telelogic ever has.</p>

<h2><a name="TelelogicSynergy-MethodologyofintegrationwithCCNET"></a>Methodology of integration with CCNET</h2>

<p>Certain assumptions have been made about the integration of CruiseControl.NET and CM Synergy. First, it is assumed that all projects use a task based reconfigure template, rather than an object based.</p>
<ul>
	<li>The reconfigure template for all projects is task based, not object status based.</li>
	<li>Developers have there own projects with purpose "Insulated Development"</li>
	<li>There's no real point to continuous integration for "Collaborative Development" purpose projects, since Synergy is not a label based system.</li>
	<li>Build Managers test completed tasks in a project with purpose "Integration Testing" (or similar).</li>
	<li>We could create a baseline in the integration project to push completed tasks to the developers; however, this is less than ideal. Baselines in Synergy are expensive and were intended for milestone events like completion of a feature, or a configuration used for a QA testing round.</li>
	<li>The more efficient approach is to have a shared task folder that is included in each developer's reconfigure template/properties.
	<ul>
		<li>Successfully integrated tasks can be manually added to this folder.</li>
		<li>This will push newly completed and integrated tasks to developers when they reconfigure (i.e., "update members").</li>
	</ul>
	</li>
</ul>


<h2><a name="TelelogicSynergy-CMSynergyExampleConfigurations"></a>CM Synergy Example Configurations</h2>

<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>Example using Defaults</b></div><div class="codeContent panelContent">
<pre class="code-xml"><span class="code-tag">&lt;sourcecontrol type=<span class="code-quote">"synergy"</span>&gt;</span>
    <span class="code-tag">&lt;connection&gt;</span>
        <span class="code-tag">&lt;host&gt;</span>myserver<span class="code-tag">&lt;/host&gt;</span>
        <span class="code-tag">&lt;database&gt;</span>\\myserver\share\mydatabase<span class="code-tag">&lt;/database&gt;</span>
    <span class="code-tag">&lt;/connection&gt;</span>
    <span class="code-tag">&lt;project&gt;</span>
        <span class="code-tag">&lt;release&gt;</span>Product/1.0<span class="code-tag">&lt;/release&gt;</span>
        <span class="code-tag">&lt;projectSpecification&gt;</span>Product-1<span class="code-tag">&lt;/projectSpecification&gt;</span>
        <span class="code-tag">&lt;taskFolder&gt;</span>1234<span class="code-tag">&lt;/taskFolder&gt;</span>
    <span class="code-tag">&lt;/project&gt;</span>
    <span class="code-tag">&lt;changeSynergy&gt;</span>
        <span class="code-tag">&lt;url&gt;</span>http://myserver:8060<span class="code-tag">&lt;/url&gt;</span>
    <span class="code-tag">&lt;/changeSynergy&gt;</span>
<span class="code-tag">&lt;/sourcecontrol&gt;</span></pre>
</div></div>
<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>Full Example</b></div><div class="codeContent panelContent">
<pre class="code-xml"><span class="code-tag">&lt;sourcecontrol type=<span class="code-quote">"synergy"</span>&gt;</span>
    <span class="code-tag">&lt;connection&gt;</span>
        <span class="code-tag">&lt;host&gt;</span>myserver<span class="code-tag">&lt;/host&gt;</span>
        <span class="code-tag">&lt;database&gt;</span>\\myserver\share\mydatabase<span class="code-tag">&lt;/database&gt;</span>
        <span class="code-tag"><span class="code-comment">&lt;!-- store values in an environmental variable--&gt;</span></span>
        <span class="code-tag">&lt;username&gt;</span>%CCM_USER%<span class="code-tag">&lt;/username&gt;</span>
        <span class="code-tag">&lt;password&gt;</span>%CCM_PWD%<span class="code-tag">&lt;/password&gt;</span>
        <span class="code-tag">&lt;role&gt;</span>build_mgr<span class="code-tag">&lt;/role&gt;</span>
        <span class="code-tag">&lt;homeDirectory&gt;</span>D:\cmsynergy\%CCM_USER%<span class="code-tag">&lt;/homeDirectory&gt;</span>
        <span class="code-tag">&lt;clientDatabaseDirectory&gt;</span>D:\cmsynergy\uidb<span class="code-tag">&lt;/clientDatabaseDirectory&gt;</span>
        <span class="code-tag">&lt;polling&gt;</span>true<span class="code-tag">&lt;/polling&gt;</span>
        <span class="code-tag">&lt;timeout&gt;</span>3600<span class="code-tag">&lt;/timeout&gt;</span>
    <span class="code-tag">&lt;/connection&gt;</span>
    <span class="code-tag">&lt;project&gt;</span>
        <span class="code-tag">&lt;release&gt;</span>Product/1.0<span class="code-tag">&lt;/release&gt;</span>
        <span class="code-tag">&lt;projectSpecification&gt;</span>Product-1<span class="code-tag">&lt;/projectSpecification&gt;</span>
        <span class="code-tag">&lt;taskFolder&gt;</span>1234<span class="code-tag">&lt;/taskFolder&gt;</span>
        <span class="code-tag">&lt;baseline&gt;</span>false<span class="code-tag">&lt;/baseline&gt;</span>
        <span class="code-tag">&lt;purpose&gt;</span>Integration Testing<span class="code-tag">&lt;/purpose&gt;</span>
        <span class="code-tag">&lt;template&gt;</span>true<span class="code-tag">&lt;/template&gt;</span>
    <span class="code-tag">&lt;/project&gt;</span>
    <span class="code-tag">&lt;changeSynergy&gt;</span>
        <span class="code-tag">&lt;role&gt;</span>User<span class="code-tag">&lt;/role&gt;</span>
        <span class="code-tag">&lt;url&gt;</span>http://myserver:8060<span class="code-tag">&lt;/url&gt;</span>
        <span class="code-tag">&lt;username&gt;</span>%CS_USER%<span class="code-tag">&lt;/username&gt;</span>
        <span class="code-tag">&lt;password&gt;</span>%CS_PWD%<span class="code-tag">&lt;/password&gt;</span>
    <span class="code-tag">&lt;/changeSynergy&gt;</span>
<span class="code-tag">&lt;/sourcecontrol&gt;</span></pre>
</div></div>

<h2><a name="TelelogicSynergy-CMSynergyConfigurationElements"></a>CM Synergy Configuration Elements</h2>

<div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Configuration Reuse</b><br />
<p>By creating separate child nodes for the &lt;connection&gt;, &lt;project&gt;, and &lt;changeSynergy&gt; configuration elements, it is very easy to create reusable blocks of XML.  For more information on XML DTD entities and reusable configuration blocks, see <a href="http://jira.public.thoughtworks.org/browse/CCNET-239">JIRA issue CCNET-239</a> and <a href="http://peeps.dallas.focus-technologies.com/roller/page/nithy/20040128#using_the_entity_includes_in">Nithy Palanivelu's Weblog </a></p></td></tr></table></div>

<h4><a name="TelelogicSynergy-%3Cconnection%3Enode%28required%29"></a>&lt;connection&gt; node (required)</h4>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Connection Item </th>
<th class='confluenceTh'> Description </th>
<th class='confluenceTh'> Type </th>
<th class='confluenceTh'> Environmental Variable Expansion </th>
<th class='confluenceTh'> Default </th>
</tr>
<tr>
<td class='confluenceTd'> workingDirectory </td>
<td class='confluenceTd'> The directory to execute all CM Synergy commands from. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> Yes </td>
<td class='confluenceTd'> "%PROGRAMFILES%\Telelogic\CM Synergy 6.3\bin" </td>
</tr>
<tr>
<td class='confluenceTd'> executable </td>
<td class='confluenceTd'> The executable filename/path for the CM Synergy command line interface. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> Yes </td>
<td class='confluenceTd'> "ccm.exe" </td>
</tr>
<tr>
<td class='confluenceTd'> host </td>
<td class='confluenceTd'> The hostname of the Synergy server. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> "localhost" </td>
</tr>
<tr>
<td class='confluenceTd'> database </td>
<td class='confluenceTd'> The physical path to the Informix database for the Synergy database. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> Required. </td>
</tr>
<tr>
<td class='confluenceTd'> username </td>
<td class='confluenceTd'> The username for the Synergy session. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> Yes </td>
<td class='confluenceTd'> "%USERNAME%" </td>
</tr>
<tr>
<td class='confluenceTd'> password </td>
<td class='confluenceTd'> The Synergy password for the associated username. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> Yes </td>
<td class='confluenceTd'> "" </td>
</tr>
<tr>
<td class='confluenceTd'> role </td>
<td class='confluenceTd'> The role to use for the Synergy session. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> "build_mgr" </td>
</tr>
<tr>
<td class='confluenceTd'> homeDirectory </td>
<td class='confluenceTd'> The full physical path of the home directory for the associated username on the client machine. This corresponds to the repository root. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> Yes </td>
<td class='confluenceTd'> "%SystemDrive%\cmsynergy\\\%USERNAME%" </td>
</tr>
<tr>
<td class='confluenceTd'> clientDatabaseDirectory </td>
<td class='confluenceTd'> Path for the remote client session to copy database information to. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> Yes </td>
<td class='confluenceTd'> "%SystemDrive%\cmsynergy\uidb" </td>
</tr>
<tr>
<td class='confluenceTd'> polling </td>
<td class='confluenceTd'> If enabled, queues commands while the server is offline. </td>
<td class='confluenceTd'> boolean </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> false </td>
</tr>
<tr>
<td class='confluenceTd'> timeout </td>
<td class='confluenceTd'> Timeout in seconds for all Synergy commands. </td>
<td class='confluenceTd'> int </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> 3600 </td>
</tr>
<tr>
<td class='confluenceTd'> issueUrlBuilder </td>
<td class='confluenceTd'> Converts the comment (or parts from it) into an url pointing to the issue for this build. <br clear="all" />
See <a href="IssueUrlBuilder.html" title="IssueUrlBuilder">Issue Builder</a> for more details <br clear="all" /> </td>
<td class='confluenceTd'> Group </td>
<td class='confluenceTd'> N/A </td>
<td class='confluenceTd'> false <br clear="all" /> </td>
</tr>
</tbody></table>

<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>The Polling Feature</b><br />
<p>The polling feature is useful if your Synergy installation routinely goes offline (i.e., "protected mode").  Long runing builds may inadventently conflict with the routine downtime schedules.  For example, polling allows your build to queue CM Synergy commands until the nightly backup completes.</p></td></tr></table></div>
<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Environmental Variables</b><br />
<p>Environmental variable support enables you to keep your sensitive build manager credentials out of the CCNET configuration file.  This is especially important if the configuration file is under source control, whereby it would be readable by all CM Synergy users.</p></td></tr></table></div>

<h4><a name="TelelogicSynergy-%3Cproject%3Enode%28required%29"></a>&lt;project&gt; node (required)</h4>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Project Item </th>
<th class='confluenceTh'> Description </th>
<th class='confluenceTh'> Type </th>
<th class='confluenceTh'> Environmental Variable Expansion </th>
<th class='confluenceTh'> Default </th>
</tr>
<tr>
<td class='confluenceTd'> release </td>
<td class='confluenceTd'> The component + version specification. NB. The specification is case-sensitive. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> Required. </td>
</tr>
<tr>
<td class='confluenceTd'> projectSpecification </td>
<td class='confluenceTd'> The Synergy project specification for the integration project. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> Required. </td>
</tr>
<tr>
<td class='confluenceTd'> taskFolder </td>
<td class='confluenceTd'> The folder specification for the shared folder which will be used to "manually" add successfully integrated tasks added to. </td>
<td class='confluenceTd'> int </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> 0 </td>
</tr>
<tr>
<td class='confluenceTd'> baseline </td>
<td class='confluenceTd'> Flag to creates a new baseline of the project configuration after a successful integration. </td>
<td class='confluenceTd'> boolean </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> false </td>
</tr>
<tr>
<td class='confluenceTd'> purpose </td>
<td class='confluenceTd'> The Synergy purpose specification for baselines created by CruiseControl.NET. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> "Integration Testing" </td>
</tr>
<tr>
<td class='confluenceTd'> template </td>
<td class='confluenceTd'> Flag to reset the reconfigure properties for this project and all subprojects to use the reconfigure template. </td>
<td class='confluenceTd'> boolean </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> false </td>
</tr>
</tbody></table>

<h4><a name="TelelogicSynergy-%3CchangeSynergy%3Enode%28optional%29"></a>&lt;changeSynergy&gt; node (optional)</h4>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Change Synergy Item </th>
<th class='confluenceTh'> Description </th>
<th class='confluenceTh'> Type </th>
<th class='confluenceTh'> Environmental Variable Expansion </th>
<th class='confluenceTh'> Default </th>
</tr>
<tr>
<td class='confluenceTd'> url </td>
<td class='confluenceTd'> The base HTTP URL for your ChangeSynergy installation </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> Required. </td>
</tr>
<tr>
<td class='confluenceTd'> username </td>
<td class='confluenceTd'> The <b>optional</b> username for ChangeSynergy anonymous access. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> Yes </td>
<td class='confluenceTd'> Optional. </td>
</tr>
<tr>
<td class='confluenceTd'> password </td>
<td class='confluenceTd'> The <b>optional</b> password for ChangeSynergy anonymous access. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> Yes </td>
<td class='confluenceTd'> Optional. </td>
</tr>
<tr>
<td class='confluenceTd'> role </td>
<td class='confluenceTd'> The role to use for the Synergy session. </td>
<td class='confluenceTd'> string </td>
<td class='confluenceTd'> No </td>
<td class='confluenceTd'> "User" </td>
</tr>
</tbody></table>
<div class='panelMacro'><table class='warningMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/forbidden.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Security Warning</b><br />
<p>Be careful about specifying a ChangeSynergy username and password.  If you do not specify these optional values, the end-user will be prompted by ChangeSynergy to enter valid credentials.  If an anonymous access account is used, specify a user that has only read-only permissions within ChangeSynergy.  This will prevent someone from modifying objects, such as tasks, through ChangeSynergy.  If you specify an impersonation account with write permissions, a malicious user could bypass auditing in ChangeSynergy.</p></td></tr></table></div>
<ul>
	<li>Contributed by Steve Jansen</li>
</ul>


				    
                    			    </td>
		    </tr>
	    </table>
	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
			<tr>
				<td height="12" background="http://confluence.public.thoughtworks.org//images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
			</tr>
		    <tr>
			    <td align="center"><font color="grey">Document generated by Confluence on Sep 29, 2009 20:59</font></td>
		    </tr>
	    </table>
    </body>
</html>